草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 持有派生类引用的基类的 std::unique_ptr 在 gcc 编译器中不显示警告,而裸指针显示它。为什么?

我有一个基类和派生类的层次结构。基类有一个被派生类覆盖的虚函数。classBase{public:~Base();virtualvoidother_functionality()=0;};classDerived:publicBase{public:~Derived();voidother_functionality(){//somecode};};现在如果我这样做:intmain(){Base*P=newDerived();deletep;return0;}报错:删除具有非虚析构函数的多态类类型的对象。但是使用unique_ptr它会毫无警告地通过。intmain(){std::un

C++从基类指针访问派生类成员

如果我分配一个Derived类的对象(具有Base的基类),并将指向该对象的指针存储在指向基类的变量中类,如何访问Derived类的成员?这是一个例子:classBase{public:intbase_int;};classDerived:publicBase{public:intderived_int;};Base*basepointer=newDerived();basepointer->//Accessderived_inthere,isitpossible?Ifso,thenhow? 最佳答案 不,您不能访问derived_

C++从基类指针访问派生类成员

如果我分配一个Derived类的对象(具有Base的基类),并将指向该对象的指针存储在指向基类的变量中类,如何访问Derived类的成员?这是一个例子:classBase{public:intbase_int;};classDerived:publicBase{public:intderived_int;};Base*basepointer=newDerived();basepointer->//Accessderived_inthere,isitpossible?Ifso,thenhow? 最佳答案 不,您不能访问derived_

c++ - 为什么对基类的赋值有效,而对派生类的赋值却是编译错误?

这是一道面试题。考虑以下几点:structA{};structB:A{};Aa;Bb;a=b;b=a;为什么b=a;会报错,而a=b;却完全没问题? 最佳答案 因为B的隐式声明的复制赋值操作符隐藏了A的隐式声明的复制赋值操作符。所以对于b=a这行,只有B的operator=是候选。但它的参数类型为Bconst&,不能由A参数初始化(您需要向下转换)。所以你得到一个错误。 关于c++-为什么对基类的赋值有效,而对派生类的赋值却是编译错误?,我们在StackOverflow上找到一个类似的问

c++ - 为什么对基类的赋值有效,而对派生类的赋值却是编译错误?

这是一道面试题。考虑以下几点:structA{};structB:A{};Aa;Bb;a=b;b=a;为什么b=a;会报错,而a=b;却完全没问题? 最佳答案 因为B的隐式声明的复制赋值操作符隐藏了A的隐式声明的复制赋值操作符。所以对于b=a这行,只有B的operator=是候选。但它的参数类型为Bconst&,不能由A参数初始化(您需要向下转换)。所以你得到一个错误。 关于c++-为什么对基类的赋值有效,而对派生类的赋值却是编译错误?,我们在StackOverflow上找到一个类似的问

c++ - 非 Qt 基类

我在VisualStudio中使用Qt(我是新手)4.8.2,并且我创建了一个名为“Contact”的基类。我不希望这个类是Qt独有的,所以我的意图是创建另一个类“QContact”,它将继承“Contact”,以及QObject并处理所有与Qt相关的业务,比如Q_OBJECT宏等。不幸的是,当我继承时,构建失败,说:moc_QContact.cpp(53):errorC2039:'staticMetaObject':isnotamemberof'Contact'moc_QContact.cpp(75):errorC2039:'qt_metacast':isnotamemberof'C

c++ - 非 Qt 基类

我在VisualStudio中使用Qt(我是新手)4.8.2,并且我创建了一个名为“Contact”的基类。我不希望这个类是Qt独有的,所以我的意图是创建另一个类“QContact”,它将继承“Contact”,以及QObject并处理所有与Qt相关的业务,比如Q_OBJECT宏等。不幸的是,当我继承时,构建失败,说:moc_QContact.cpp(53):errorC2039:'staticMetaObject':isnotamemberof'Contact'moc_QContact.cpp(75):errorC2039:'qt_metacast':isnotamemberof'C

c++ - 三元运算符隐式转换为基类

考虑这段代码:structBase{intx;};structBar:Base{inty;};structFoo:Base{intz;};Bar*bar=newBar;Foo*foo=newFoo;Base*returnBase(){Base*obj=!bar?foo:bar;returnobj;}intmain(){returnBase();return0;}这在Clang或GCC下不起作用,给我:error:conditionalexpressionbetweendistinctpointertypes‘Foo*’and‘Bar*’lacksacastBase*obj=!bar?f

c++ - 三元运算符隐式转换为基类

考虑这段代码:structBase{intx;};structBar:Base{inty;};structFoo:Base{intz;};Bar*bar=newBar;Foo*foo=newFoo;Base*returnBase(){Base*obj=!bar?foo:bar;returnobj;}intmain(){returnBase();return0;}这在Clang或GCC下不起作用,给我:error:conditionalexpressionbetweendistinctpointertypes‘Foo*’and‘Bar*’lacksacastBase*obj=!bar?f

c++ - 从基类调用虚函数

假设我们有:ClassBase{virtualvoidf(){g();};virtualvoidg(){//DosomeBaserelatedcode;}};ClassDerived:publicBase{virtualvoidf(){Base::f();};virtualvoidg(){//DosomeDerivedrelatedcode};};intmain(){Base*pBase=newDerived;pBase->f();return0;}将从Base::f()调用哪个g()?Base::g()还是Derived::g()?谢谢... 最佳答案